package com.fallen.android.diceroll;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class DiceMain extends Activity implements OnClickListener {
    
	Button d4Plus;
	Button d6Plus;
	Button d8Plus;
	Button d10Plus;
	Button d12Plus;
	Button d20Plus;
	
	TextView d4Num;
	TextView d6Num;
	TextView d8Num;
	TextView d10Num;
	TextView d12Num;
	TextView d20Num;
	
	Button d4Minus;
	Button d6Minus;
	Button d8Minus;
	Button d10Minus;
	Button d12Minus;
	Button d20Minus;
	
	Button rollButton;
	
	TextView resultTextView;
	CharSequence resultText;
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        collectViews();
        prepareViews();
    }
    
    public void onPause()
    {
    	super.onPause();
    }
    
    public void onResume()
    {
    	super.onResume();
    }
    
    public void onDestroy()
    {
    	super.onDestroy();
    }
    
    private void collectViews()
    {
    	d4Plus = (Button)findViewById(R.id.d4Plus);
    	d6Plus = (Button)findViewById(R.id.d6Plus);
    	d8Plus = (Button)findViewById(R.id.d8Plus);
    	d10Plus = (Button)findViewById(R.id.d10Plus);
    	d12Plus = (Button)findViewById(R.id.d12Plus);
    	d20Plus = (Button)findViewById(R.id.d20Plus);
    	
    	d4Num = (TextView)findViewById(R.id.d4Num);
    	d6Num = (TextView)findViewById(R.id.d6Num);
    	d8Num = (TextView)findViewById(R.id.d8Num);
    	d10Num = (TextView)findViewById(R.id.d10Num);
    	d12Num = (TextView)findViewById(R.id.d12Num);
    	d20Num = (TextView)findViewById(R.id.d20Num);
    	
    	d4Minus = (Button)findViewById(R.id.d4Minus);
    	d6Minus = (Button)findViewById(R.id.d6Minus);
    	d8Minus = (Button)findViewById(R.id.d8Minus);
    	d10Minus = (Button)findViewById(R.id.d10Minus);
    	d12Minus = (Button)findViewById(R.id.d12Minus);
    	d20Minus = (Button)findViewById(R.id.d20Minus);
    	
    	rollButton = (Button)findViewById(R.id.rollButton);
    	resultTextView = (TextView)findViewById(R.id.resultTextView);
    }
    
    private void prepareViews()
    {
    	d4Plus.setOnClickListener(this);
    	d6Plus.setOnClickListener(this);
    	d8Plus.setOnClickListener(this);
    	d10Plus.setOnClickListener(this);
    	d12Plus.setOnClickListener(this);
    	d20Plus.setOnClickListener(this);
    	
    	d4Minus.setOnClickListener(this);
    	d6Minus.setOnClickListener(this);
    	d8Minus.setOnClickListener(this);
    	d10Minus.setOnClickListener(this);
    	d12Minus.setOnClickListener(this);
    	d20Minus.setOnClickListener(this);
    	
    	rollButton.setOnClickListener(this);
    }
    
    public void onClick(View v)
    {
    	switch(v.getId())
    	{
    	
	    	case R.id.d4Plus:
	    		changeNum(d4Num, true);
	    		break;
	    	case R.id.d6Plus:
	    		changeNum(d6Num, true);
	    		break;
	    	case R.id.d8Plus:
	    		changeNum(d8Num, true);
	    		break;
	    	case R.id.d10Plus:
	    		changeNum(d10Num, true);
	    		break;
	    	case R.id.d12Plus:
	    		changeNum(d12Num, true);
	    		break;
	    	case R.id.d20Plus:
	    		changeNum(d20Num, true);
	    		break;
	    		
	    	case R.id.d4Minus:
	    		changeNum(d4Num, false);
	    		break;
	    	case R.id.d6Minus:
	    		changeNum(d6Num, false);
	    		break;
	    	case R.id.d8Minus:
	    		changeNum(d8Num, false);
	    		break;
	    	case R.id.d10Minus:
	    		changeNum(d10Num, false);
	    		break;
	    	case R.id.d12Minus:
	    		changeNum(d12Num, false);
	    		break;
	    	case R.id.d20Minus:
	    		changeNum(d20Num, false);
	    		break;
	    		
	    	case R.id.rollButton:
	    		rollDice();
	    		break;
    		
    		default:
    			Toast.makeText(this, "Default", Toast.LENGTH_LONG).show();
    			break;
    	
    	
    	}
    }
    
    private void changeNum(TextView et, boolean add)
    {
    	String val =  et.getText().toString();
    	int value = Integer.parseInt(val);
    	if(add)
    		value++;
    	else
    	{
    		value--;
    		if(value < 0)
    			value = 0;
    	}
    	et.setText(String.valueOf(value));
    }
    
    private void rollDice()
    {
    	resultTextView.setText("");
    	
    	resultText = "";
    	
    	int[] dieResults = new int[6];
    	
    	//d20
    	dieResults[0] = rollIndividualDie(d20Num, 20);
    	//d12
    	dieResults[1] = rollIndividualDie(d12Num, 12);
    	//d10
    	dieResults[2] = rollIndividualDie(d10Num, 10);
    	//d8
    	dieResults[3] = rollIndividualDie(d8Num, 8);
    	//d6
    	dieResults[4] = rollIndividualDie(d6Num, 6);
    	//d4
    	dieResults[5] = rollIndividualDie(d4Num, 4);

    	int total = sum(dieResults);
    	if(total > 0)
    	{
	    	resultText = resultText + "Total: " + total;
	    	resultTextView.setText(resultText);
    	}
    	
    }
    
    private int rollIndividualDie(TextView et, int dieSize)
    {
    	int numDies = Integer.parseInt(et.getText().toString());
    	if(numDies > 0)
    	{
    		int[] diesResult = getRandomInts(dieSize, numDies);
    		int total = sum(diesResult);
    		resultText = resultText + "d" + dieSize + ":\t" +
    			total + " = ";
    		for(int i = 0; i < diesResult.length - 1; i++)
    		{
    			resultText = resultText + "" + diesResult[i] + " + ";
    		}
    		resultText = resultText + "" + diesResult[diesResult.length-1] + "\n";
    		
    		return total;
    	}
    	return 0;
    }
    
	private int[] getRandomInts( int dieSize, int numDies )
	{
		int[] result = new int[numDies];
		for( int i = 0; i < numDies; i++ )
		{
			result[i] = 1+ (int)(Math.random() * (dieSize - 1));
		}
		
		return result;
	}
	
	private int sum(int [] nums)
	{
		int total = 0;
		for(int i : nums)
		{
			total = total + i;
		}
		
		return total;
	}
}